package ig.metrica.ejb.html;

import ig.metrica.escenario.DetalleescenarioDAO;
import ig.metrica.escenario.DetalleescenarioDTO;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author jsanchez
 */
public class GenerarHTML {

    private Integer idEscenario = -1;
    private String directorio = null;
    private String nombre = "reporte";
    private Integer secuencia = 0;
    private Integer lineBuffer = 0;
    private StringBuffer html = new StringBuffer("");
    private int lineasDeEspera = 20;
    private ControlGenerarHTMLBean htmlBean = null;
    static private GenerarHTML intancia = null;
    private boolean debug = false;
    private DetalleescenarioDAO detalleescenarioDAO = new DetalleescenarioDAO();

    private GenerarHTML() {
        htmlBean = new ControlGenerarHTMLBean();
    }

    public String getDirectorio() {
        return this.directorio;
        //return htmlBean.getDirectorio();
    }

    public void setDirectorio(String directorio) {
        this.directorio = directorio;
        //htmlBean.crearDirectorio(directorio, false);
    }

    public void crerDirecotro(String directorio) {
        this.directorio = directorio;
        //htmlBean.crearDirectorio(directorio, true);
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void cleanHTML() {
        html = new StringBuffer("");
    }

    public void setLineasDeEspera(int lineasDeEspera) {
        this.lineasDeEspera = lineasDeEspera;
    }

    public static GenerarHTML gewInstace() {
        if (intancia == null) {
            intancia = new GenerarHTML();
        }
        return intancia;
    }

    /*public static void println(String mensaje){
        gewInstace().addLineaBR(mensaje);
    }*/

    public static void deleteInstace() {
        intancia = null;
    }

    private void addLinea(String linea) {
        //System.out.println(linea);
        if (linea == null || (linea.toUpperCase().startsWith("DEBUG") && !debug)) {
            return;
        }

        if (directorio == null || nombre == null || secuencia == null || html == null) {
            return;
        }

        html.append(linea);
        //System.out.println(html.toString());
        lineBuffer++;
        if (lineBuffer >= lineasDeEspera) {
            lineBuffer = 0;
            //htmlBean.generarHTML(directorio, nombre + secuencia.toString(), html);
            addLineaEnBaseDeDatos();
            secuencia++;
            cleanHTML();
        }
    }

    private void addLineaBR(String linea) {
        //System.out.println(linea);
        if (linea == null || (linea.toUpperCase().startsWith("DEBUG") && !debug)) {            
            return;
        }

        if (directorio == null || nombre == null || secuencia == null || html == null) {
            return;
        }

        html.append(linea+"<BR>");
        //System.out.println(html.toString().replace("<BR>","\n"));
        lineBuffer++;
        if (lineBuffer >= lineasDeEspera) {
            lineBuffer = 0;
            //htmlBean.generarHTML(directorio, nombre + secuencia.toString(), html);
            addLineaEnBaseDeDatos();
            secuencia++;
            cleanHTML();
        }
    }

    public void generarHTML() {
        if (html != null && !html.toString().trim().equals("")) {
            lineBuffer = 0;
            //htmlBean.generarHTML(directorio, nombre + secuencia.toString(), html);
            addLineaEnBaseDeDatos();
            secuencia++;
            cleanHTML();
        }
    }

    private void addLineaEnBaseDeDatos(){
            try {
                detalleescenarioDAO.create( new DetalleescenarioDTO(idEscenario, secuencia, html.toString(), html.toString().startsWith("DEBUG")?"DEBUG":"LOG", directorio) );
            } catch (SQLException ex) {
                ex.printStackTrace();
            } catch (Throwable ex) {
                ex.printStackTrace();
            }        
    }
    
    public void println(String linea) {
        System.out.println(linea.replace("<BR>", "\n"));
        addLineaBR(linea);
    }

    public  void print(String linea){
        System.out.println(linea);
        addLinea(linea);
    }

    public void printlnDebug(String linea) {
        linea = "DEBUG: "+ linea;
        System.out.println(linea);
        addLineaBR(linea);
    }

    public  void printDebug(String linea){
        linea = "DEBUG: "+ linea;
        System.out.println(linea);
        addLinea("DEBUG: "+linea);
    }

    public boolean isDebug() {
        return debug;
    }

    public void setDebug(boolean debug) {
        this.debug = debug;
    }

    public void setIdEscenario(Integer IdEscenario) throws SQLException, Exception, Throwable {
        this.idEscenario = IdEscenario;
        detalleescenarioDAO.update(idEscenario, directorio);
    }


}
